﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Unimaq.Macroprocesos.LogicaNegocio
{
    public class DocumentoBLL
    {
        public List<AccesoDatos.Documento> Listar()
        {
            AccesoDatos.DocumentoDAO documentoDAO = new AccesoDatos.DocumentoDAO();
            return documentoDAO.Listar();
        }
        
        public int Registrar(AccesoDatos.Documento nuevoDocumento)
        {
            Unimaq.Macroprocesos.AccesoDatos.DocumentoDAO documentoDAO = new Unimaq.Macroprocesos.AccesoDatos.DocumentoDAO();
            return documentoDAO.Registrar(nuevoDocumento);
        }

        public List<AccesoDatos.Documento> Listar(AccesoDatos.Proceso selectedProceso)
        {
            List<AccesoDatos.Documento> lista = Listar();
            return lista.Where(x => x.IdProceso == selectedProceso.Id).ToList();
        }

        public List<AccesoDatos.Documento> Buscar(int idProceso, string codigoDocumento)
        {
            List<AccesoDatos.Documento> lista = Listar();
            return lista.Where(x => (x.IdProceso.HasValue ? x.IdProceso.Value : 0).Equals(idProceso) && x.Codigo.Equals(codigoDocumento)).ToList();
        }

        public List<AccesoDatos.Documento> Buscar(string atributo, string valor)
        {
            List<AccesoDatos.Documento> lista = Listar();
            List<AccesoDatos.Documento> result = new List<AccesoDatos.Documento>();

            if (!string.IsNullOrWhiteSpace(valor))
            {
                switch (atributo)
                {
                    case "codigo":
                        result = lista.Where(x => x.Codigo.Contains(valor)).ToList();
                        break;
                    case "nombre":
                        result = lista.Where(x => x.Nombre.Contains(valor)).ToList();
                        break;
                }
            }
            else
            {
                result = lista;
            }

            return result;
        }

        public int Actualizar(AccesoDatos.Documento selectedDocumento, AccesoDatos.Documento updDocumento)
        {
            AccesoDatos.DocumentoDAO documentoDAO = new AccesoDatos.DocumentoDAO();
            return documentoDAO.Actualizar(selectedDocumento, updDocumento);
        }

        public int Eliminar(AccesoDatos.Documento selectedDocumento)
        {
            AccesoDatos.DocumentoDAO documentoDAO = new AccesoDatos.DocumentoDAO();
            return documentoDAO.Eliminar(selectedDocumento);
        }
    }
}
